package cn.edu.sgu.www.mhxysy.service.chongwu;

import cn.edu.sgu.www.mhxysy.dto.chongwu.ChongwuNeidanDTO;
import cn.edu.sgu.www.mhxysy.entity.chongwu.ChongwuNeidan;
import cn.edu.sgu.www.mhxysy.vo.chongwu.ChongwuNeidanVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 沐雨橙风ιε
 * @version 1.0
 */
public interface ChongwuNeidanService {

    /**
     * 内丹共鸣
     * @param neidanId 高级内丹ID
     */
    @Transactional(rollbackFor = Exception.class)
    void resonate(String neidanId);

    /**
     * 内丹遗忘
     * @param neidanDTO 内丹信息
     */
    @Transactional(rollbackFor = Exception.class)
    void forget(ChongwuNeidanDTO neidanDTO);

    /**
     * 内丹提升
     * @param neidanDTO 内丹信息
     */
    @Transactional(rollbackFor = Exception.class)
    void improve(ChongwuNeidanDTO neidanDTO);

    /**
     * 内丹领悟
     * @param chongwuId 宠物ID
     * @param location 内丹位置
     */
    void comprehend(String chongwuId, Integer location);

    /**
     * 重置共鸣
     * @param neidanId 高级内丹ID
     * @param resonanceId 低级内丹类型ID
     */
    void resetResonate(String neidanId, Integer resonanceId);

    /**
     * 学习内丹
     * @param chongwuId 宠物ID
     * @param location 内丹位置
     * @param neidanId 宠物内丹类型ID
     */
    void study(String chongwuId, Integer location, Integer neidanId);

    /**
     * 查询高级内丹共鸣的内丹个数
     * @param neidanId 内丹ID
     * @return Long
     */
    Long selectResonateCount(String neidanId);

    /**
     * 查询共鸣的宠物内丹列表
     * @param neidanId 内丹ID
     * @return List<String> 共鸣的内丹名称
     */
    List<String> selectResonates(String neidanId);

    /**
     * 查询宠物内丹详情
     * @param neidanId 宠物内丹ID
     * @return NeidanVO
     */
    ChongwuNeidanVO selectDetails(String neidanId);

    /**
     * 条件查询宠物的内丹
     * @param neidanDTO 查询条件
     * @return List<ChongwuNeidan>
     */
    List<ChongwuNeidan> selectList(ChongwuNeidanDTO neidanDTO);

    /**
     * 查询宠物的内丹列表
     * @param neidanDTO 内丹信息
     * @return List<NeidanVO>
     */
    List<ChongwuNeidanVO> selectNeidans(ChongwuNeidanDTO neidanDTO);
}